﻿using MahApps.Metro.Controls;
using System.Diagnostics;
using System.Windows;
using VM.CameraSet;
using VM.Start.Services;

namespace VM.Start
{
    /// <summary>
    /// MainView.xaml 的交互逻辑
    /// </summary>
    public partial class MainView : MetroWindow
    {
        public MainView()
        {
            InitializeComponent();
            PluginService.InitPlugin();
            this.DataContext = MainViewModel.Ins;
            MainViewModel.Ins.mainView = this;
            // 注册关闭事件，关闭时不销毁，只隐藏窗口
            this.Closing += MainView_Closing;
        }

        private void MainView_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            // 取消关闭操作，并隐藏窗口
            e.Cancel = true;
            this.Hide();
        }

        private void LaunchVMSite(object sender, RoutedEventArgs e)
        {

        }

        public void ShowWindow()
        {
            if (!this.IsVisible) // 检查窗口是否未显示
            {
                this.Topmost = true;  // 设置窗口为最上层
                this.Show();          // 显示窗口
            }
            else
            {
                if (this.WindowState == WindowState.Minimized) // 如果窗口最小化
                {
                    this.WindowState = WindowState.Normal;     // 恢复窗口到正常状态
                }

                this.Topmost = true;  // 确保窗口为最上层
                this.Activate();      // 激活窗口
            }

            // 防止窗口永久保持最上层，如果需要，可以重置
            this.Topmost = false;
        }

        public void Dispose()
        {
            try
            {
                // 释放所有项目相关线程资源
                if (Solution.Ins?.ProjectList != null)
                {
                    foreach (Project prj in Solution.Ins.ProjectList)
                    {
                        prj.Dispose();
                    }
                }

                // 释放相机资源
                if (CameraSetViewModel.Ins?.SelectedCameraModel != null)
                {
                    CameraSetViewModel.Ins.SelectedCameraModel.Dispose();
                    CameraSetViewModel.Ins.SelectedCameraModel = null;
                }

                //// 释放其他视图模型资源（假设有可能用到其他资源）
                //MainViewModel.Ins?.Dispose(); // 如果 MainViewModel 实现了 IDisposable

                // 清理与 UI 相关的资源
                this.DataContext = null; // 断开绑定以防止内存泄漏

                //// 清理可能存在的非托管资源（例如插件服务）
                //PluginService.Dispose(); // 假设 PluginService 有 Dispose 方法
            }
            catch (Exception ex)
            {
                // 日志记录异常
                Debug.WriteLine($"Dispose 出现异常: {ex.Message}\n{ex.StackTrace}");
            }
            finally
            {
                // 确保垃圾回收器不会再次调用析构函数
                GC.SuppressFinalize(this);
            }
        }

    }
}
